
 1000  *SAVE S.CRC GENERATOR
 1010  *--------------------------------
 1020  BUFFER .EQ $4000
 1030  LIMIT  .EQ $4102
 1040  *--------------------------------
 1050  CRC    .EQ $00,01
 1060  PNTR   .EQ $02,03
 1070  TEMP   .EQ $0A,0B
 1080  *--------------------------------
 1090  PRNTAX .EQ $F941
 1100  CROUT  .EQ $FD8E
 1110  *--------------------------------
 1120  *      SIMULATE SENDING A BUFFER-FULL
 1130  *--------------------------------
 1140  SEND
 1150         LDA #0       CLEAR CRC BYTES IN BUFFER
 1160         STA LIMIT-1
 1170         STA LIMIT-2
 1180         JSR NEW.CRC.BUFFER    COMPUTE CRC OF 258 BYTES
 1190         LDX CRC      STORE CRC INTO LAST 2 BYTES
 1200         LDA CRC+1
 1210         STX LIMIT-1
 1220         STA LIMIT-2
 1230         JSR PRNTAX   DISPLAY THE CRC
 1240         JMP CROUT    <RETURN> AND RETURN
 1250  *--------------------------------
 1260  *      SIMULATE RECEIVING A BUFFER-FULL
 1270  *--------------------------------
 1280  RECV
 1290         JSR NEW.CRC.BUFFER    COMPUTE CRC OF 258 BYTES
 1300         LDX CRC      DISPLAY CRC IN HEX
 1310         LDA CRC+1
 1320         JSR PRNTAX
 1330         JMP CROUT
 1340  *--------------------------------
 1350         .OP 65802
 1360  *--------------------------------
 1370  *      CRCH      CRCL      DATA
 1380  *   aaaa.bbbb.cccc.dddd.eeee.ffff
 1390  *  +0000.aaaa
 1400  *   ---------
 1410  *   aaaa.gggg
 1420  *            +gggg.0000.aaaa.gggg
 1430  *            +000a.aaag.ggg0.0000
 1440  *             -------------------
 1450  *             (crchi)   (crclo)
 1460  *--------------------------------
 1470  NEW.CRC.BUFFER
 1480         CLC
 1490         XCE
 1500         REP #$30     M&X BOTH 16-BITS
 1510         LDA ##$FFFF
 1520         STA CRC      INITIALIZE CRC FOR BUFFER
 1530         LDX ##BUFFER POINT TO BUFFER
 1540  *--------------------------------
 1550  .1     SEP #$20     CRC=aaaabbbbccccdddd, DATA=eeeeffff
 1560         LDA CRC+1    aaaabbbb .eor. 0000aaaa = aaaagggg
 1570         LSR
 1580         LSR
 1590         LSR
 1600         LSR          0000aaaa
 1610         EOR CRC+1    aaaabbbb
 1620         XBA          AGXX
 1630         LDA #0       AG00
 1640         REP #$20
 1650         LSR
 1660         LSR
 1670         LSR          000a.aaag.ggg0.0000
 1680         STA TEMP
 1690         LSR          0000.aaaa.gggg.0000
 1700         EOR CRC      aaaa.bbbb.cccc.dddd = aaaa.gggg.kkkk.dddd
 1710         XBA          kkkk.dddd.aaaa.gggg
 1720         EOR TEMP     000a.aaag.ggg0.0000
 1730         SEP #$20
 1740         EOR 0,X        crchi.crclo
 1750         REP #$20
 1760         STA CRC
 1770  *--------------------------------
 1780         INX
 1790         CPX ##LIMIT
 1800         BCC .1
 1810         XCE
 1820         RTS
 1830  *--------------------------------
 1840  *   FIND BAD BIT BY BRUCE LOVE'S METHOD
 1850  *--------------------------------
 1860  DUMMY.CRC  .EQ $10,11
 1870  *--------------------------------
 1880  FIND.BAD.BIT
 1890         JSR RECV     RECEIVE, COMPUTING NEW CRC
 1900  *--------------------------------
 1910         CLC
 1920         XCE          ENTER NATIVE MODE
 1930         REP #$30     X,M 16 BITS
 1940         LDX ##$80F   X=BIT NUMBER
 1950         LDA ##1      START DUMMY CRC IN A-REG
 1960  .1     CMP CRC
 1970         BEQ .2       ...FOUND BAD BIT!
 1980         DEX          DECREMENT BIT NUMBER
 1990         BMI .2       ...WENT TOO FAR, COULDN'T FIND BAD BIT
 2000         ASL          SHIFT DUMY CRC
 2010         BCC .1
 2020         EOR ##$1021
 2030         BCS .1       ...ALWAYS
 2040  *--------------------------------
 2050  .2     TXA          BIT NUMBER
 2060         SEC
 2070         XCE
 2080         XBA
 2090         JMP PRNTAX
 2100  *--------------------------------

